package main

import (
	"fmt"
	"runtime"
	"time"
)

func newTask() {
	i := 0
	for {
		i++
		fmt.Printf("new goroutine: i=%d\n", i)
		time.Sleep(time.Second)
	}
}

func goRoutine() {
	// go newTask() // 开启一个新 goroutine
	// 无参
	go func() {
		defer fmt.Println("A.defer")
		func() {
			defer fmt.Println("B.defer")
			fmt.Println("B")
			runtime.Goexit() // 终止当前 goroutine
		}() // 匿名函数
		fmt.Println("A")
	}() // 匿名函数

	// 有参
	go func(a, b int) int {
		fmt.Println(a, b)
		return a + b
	}(10, 20)
	// 获取协程返回值 需要使用channel

	i := 0

	for {
		i++
		fmt.Printf("main goroutine: i=%d\n", i)
		time.Sleep(time.Second)
	}
}
